/-imports
/-storage ...
/-storage/attached ...
AttachedStorage.ts
LocalStorageStorage.ts
WebSQLStorage.ts
/-typings
knockout.d.ts
websql.d.ts
stringUtils.ts
teapo.html
1
module storage.attached {
2
 
3
  export class LocalStorageStorage implements AttachedStorage {
4
 
5
    constructor(
6
      private _uniqueKey: string,
7
      private _localStorage: typeof localStorage) {
8
    }
9
 
10
    getNames(callback: (error: Error, names: string[]) => void) {
11
 
12
      var names: string[] = [];
13
 
14
      for (var i = 0; i < this._localStorage.length; i++) {
15
        var key = this._localStorage.key(i);
16
 
17
        if (this._uniqueKey) {
18
          if (!startsWith(key, this._uniqueKey)) continue;
19
          key = key.slice(this._uniqueKey.length);
20
        }
21
 
22
        names.push(key);
23
      }
24
 
25
      callback(null, names);
26
    }
27
 
28
    populate(name: string, obj: any, callback: (error: Error) => void) {
29
 
30
      var prefix = (this._uniqueKey || '') + name;
31
 
32
      for (var k in obj) if (obj.hasOwnProperty(k)) {
33
        var key = prefix + k;
34
 
35
        obj[k] = this._localStorage.getItem(key);
36
      }
37
 
38
      callback(null);
39
    }
40
 
41
    update(name: string, obj: any, callback: (error: Error) => void) {
42
 
43
      var prefix = (this._uniqueKey || '') + name;
44
 
45
      for (var k in obj) if (obj.hasOwnProperty(k)) {
46
        var key = prefix + k;
47
 
48
        var value = obj[k];
49
        if (value === null)
50
          this._localStorage.removeItem(key);
51
        else
52
          this._localStorage.setItem(key, value);
53
      }
54
 
55
      callback(null);
56
    }
57
 
58
  }
59
 
60
  export module LocalStorageStorage {
61
 
62
    export function detect(uniqueKey: string, callback: (error: Error, storage: AttachedStorage) => void, windowOverride = window) {